package com.zenithmind.coding.service;

import com.zenithmind.coding.pojo.dto.CodeRunDTO;
import com.zenithmind.coding.pojo.vo.CodeRunResultVO;

/**
 * 代码执行服务接口
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
public interface CodeExecutionService {

    /**
     * 运行代码
     * 
     * @param codeRunDTO 代码运行DTO
     * @return 运行结果
     */
    CodeRunResultVO runCode(CodeRunDTO codeRunDTO);

    /**
     * 异步运行代码
     * 
     * @param codeRunDTO 代码运行DTO
     * @return 运行ID
     */
    String runCodeAsync(CodeRunDTO codeRunDTO);

    /**
     * 获取运行结果
     * 
     * @param runId 运行ID
     * @return 运行结果
     */
    CodeRunResultVO getRunResult(String runId);

    /**
     * 停止代码运行
     * 
     * @param runId 运行ID
     * @return 是否成功
     */
    Boolean stopCodeRun(String runId);

    /**
     * 检查语言是否支持
     * 
     * @param language 编程语言
     * @return 是否支持
     */
    Boolean isLanguageSupported(String language);

    /**
     * 获取支持的语言列表
     * 
     * @return 语言列表
     */
    String[] getSupportedLanguages();

    /**
     * 格式化代码
     * 
     * @param language 编程语言
     * @param sourceCode 源代码
     * @return 格式化后的代码
     */
    String formatCode(String language, String sourceCode);

    /**
     * 分析代码质量
     * 
     * @param language 编程语言
     * @param sourceCode 源代码
     * @return 代码质量分析结果
     */
    CodeRunResultVO.CodeQualityAnalysis analyzeCodeQuality(String language, String sourceCode);

    /**
     * 检测代码相似度
     * 
     * @param language 编程语言
     * @param sourceCode1 源代码1
     * @param sourceCode2 源代码2
     * @return 相似度（0-1）
     */
    Double detectCodeSimilarity(String language, String sourceCode1, String sourceCode2);
}
